package com.mkx.samples;

import com.mkx.behaviorals.observer.*;

/**
 * 观察者模式演示类
 * 演示如何使用观察者模式实现对象间的一对多依赖关系
 */
public class ObserverDemo {
    public static void main(String[] args) {
        System.out.println("===== 观察者模式演示 =====");
        
        // 创建主题
        ConcreteSubject subject = new ConcreteSubject();
        
        // 创建观察者
        Observer observerA = new ConcreteObserverA();
        Observer observerB = new ConcreteObserverB();
        
        // 注册观察者
        subject.registerObserver(observerA);
        subject.registerObserver(observerB);
        
        // 改变主题状态，观察者会收到通知
        System.out.println("主题状态改变为：状态1");
        subject.setState("状态1");
        
        // 移除一个观察者
        System.out.println("移除观察者A后，主题状态改变为：状态2");
        subject.removeObserver(observerA);
        
        // 再次改变状态，只有剩余的观察者会收到通知
        subject.setState("状态2");
        
        System.out.println("观察者模式演示完成\n");
    }
}